home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #2 / Amiga Plus CD - 2004 - No. 02.iso / AmigaPlus / Tools / Development / AmigaTalk / user / VectorN.st < prev   
Text File  |  2004-01-31  |  1KB  |  52 lines

  1. " -------------------------------------------------------------- "
  2. " VectorN.st - Implementation of Vectors of n-dimensions.        "
  3. " -------------------------------------------------------------- "
  4.  
  5. Class VectorN :Magnitude ! n ele !
  6. [
  7.   new: newElements
  8.     (newElements > 3)
  9.        ifFalse:  [ ('size of VectorN S/B > 3!') print. 
  10.                    ^ nil
  11.                  ].
  12.        
  13.     n   <- newElements. 
  14.     ele <- Array new: numElements.
  15.  
  16.     1 to: n do: [:i | ele at: i put: (Float new: 0.0)].
  17.  
  18.     ^ self
  19. |
  20.   componentAt: index
  21.     ^ (ele at: index)
  22. |
  23.   setComponent: val at: index
  24.     (index > n)
  25.       ifTrue:  [ ('Index out of range for VectorN!') print.
  26.                  ^ nil
  27.                ].
  28.  
  29.     ele at: index put: val.
  30.     ^ ele
  31. |
  32.   norm ! sum x !
  33.     sum <- Float new: 0.0.
  34.     (1 to: n) do: [:i | x   <- ((ele at: i) * (ele at: i)).
  35.                         sum <- (sum + x)
  36.                   ].
  37.    
  38.     ^ (sum sqrt)
  39. |
  40.   scale: s
  41.     (1 to: n) do: [:i | ele at: i put: (s * (ele at: i))].
  42.     ^ ele
  43. |
  44.   dot: b ! sum x !
  45.     sum <- Float new: 0.0.
  46.     (1 to: n) do: [:i | x   <- ((ele at: i) * (b at: i)).
  47.                         sum <- sum + x
  48.                   ]
  49.  
  50.     ^ sum
  51. ]
  52.